【新機能】APIレベルのイベント駆動処理を行うCloudWatch Eventsが発表されました!
ウィスキー、シガー、パイプをこよなく愛する大栗です。
本日CloudWatchにイベント駆動型の処理を行える新しい機能が追加されました。早速試してみました。
CloudWatch Events
今回追加された機能はCloudWatch Eventsというイベント駆動で処理を行う機能となります。
条件に合致することで処理を行うということでCloudWatchのアラームやSNSに似ていますが異なっている点もあるようです。筆者が個人的に比較表を作成してみました。(内容は2016年1月15日の情報を元にしています)
項目 | CloudWatch Events | CloudWatch Alarm | SNS |
---|---|---|---|
起動条件 | EC2の状態遷移、スケジュール、API呼び出し、コンソールのログイン、Auto ScalingのEC2起動/削除の成功/失敗 | CloudWatchのメトリクス | 定義されている各機能のイベント |
関連を記述する場所 | CloudWatch Eventsに記述する | CloudWatch Alarmに記述する | 呼び出し元の各サービスに分散して記述する |
後続の処理 | AWS Lambda、SNS、Kinesis Stream、ビルトイン処理 | SNS、Auto Scalingアクション、EC2アクション | HTTPリクエスト、メール、SQS、プッシュ通知、AWS Lambda |
起動するまでの時間 | ほぼリアルタイム (APIや状態遷移) | CloudWatch メトリクスの反映を待つ | ほぼリアルタイム (各処理の終了を待つ事が多い) |
類似した機能を比較してみると、様々な条件で、関連を一箇所に集約して記述でき、様々な処理を、ほぼリアルタイムで実行できる、という良い所取りな機能ということですね。
設定してみる
マネージメントコンソールでCloudWatchを見てみると、イベント が増えています。イベントのルールを作成します。
Step 1: Create rule
起動条件の選択(Event selector)と起動する処理(Targets)を指定します。
Event selectorでは、以下の5種類から選べます。
- EC2 instance state change notification
- スケジュール
- AWS API call
- AWS console sign-in
- Auto Scaling
Targetsでは、以下の4種類から選べます。
- Lambda function
- SNS topic
- Kinesis stream
- Built-in target
EC2 instance state change notification
EC2の状態遷移が条件となります。EC2の状態は、Pending、Running、Shutting down、Stopped、Stopping、Terminatedの6種類となります。
EC2の状態遷移の詳細はインスタンスのライフサイクルを参照してください。
スケジュール
Lambdaのスケジュールと同様に最短5分で繰り返し、cron形式で指定できます。
AWS API call
API callでは、30種類以上のサービスのAPIに対応しています。基本的にリソースを変更するAPIが対象になっているようで、Describe系、List系、Get系などのAPIは対象外になっています。
AWS console sign-in
マネージメントコンソールのサインインを条件にできます。ユーザの指定も行えます
Auto Scaling
Auto Scaling対象のEC2で起動/削除の成功/失敗を指定できます。Auto Scaling Groupも指定できます。
target
Built-in targetでは、Lambda Functionを書かなくても既存の処理を実行できます。現時点では、以下の4種類が使用できます。
- Create a snapshot of an EBS volume
- Reboot an EC2 instance
- Terminate an EC2 instance
- Stop an EC2 instance
今回は、以下のように設定しました。指定したEC2インスタンスでStartInstancesを実行するとEC2を停止する、という設定になります。
- Event selector
- Events:AWS EC2 call
- Service Name:EC2
- operation:StartInstances
- Targets
- Targets:Built-in target
- action:Stop an EC2 instance
- Instance ID:停止中のEC2インスタンスを指定
Step 2: Configure rule details
Ruleの名前を付けて、Built-in targetを実行するAWS Roleを指定します。
AWS Roleを作成していない場合、ここで作成可能です。Basic built-in targets role
を選択するとIAM Roleを作成できます。
Roleのポリシーは、以下の内容です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Describe*", "ec2:RebootInstances", "ec2:StopInstances", "ec2:TerminateInstances", "ec2:CreateSnapshot" ], "Resource": "*" } ] }
実行してみる
指定したEC2インスタンスでStartInstancesを実行するとEC2を停止する設定を行いました。
停止しているEC2を開始します。
開始すると、pendingになります。
インスタンスの開始をハンドリングしているようで、stoppedとなり停止しました。10秒程度でstoppedになるので、高速に反応しています。
最後に
個人的にはCloudWatchからは外れて新サービスでも良い大きな機能だと思っています。 今回はBuilt-in targetを使用しましたが、AWS Lambdaを使用することで自由に処理を行うこともできます。LambdaはVPC内のリソースへアクセスできるアップデートも予定されているので、行うことが出来る幅も更に広がると思います。